package com.Annotation;

import org.junit.Test;

import java.lang.annotation.*;

/**
 * 目标：完成注解的解析
 * 1.定义注解book（限定使用范围，方法和类。指定注解的范围：RUNTIME）
 * 2.定义BookStore类，在类和方法上用book注解
 * 3.定义AnnotationDemo3类，获取book注解上的数据
 */
public class AnnotationDemo3 {
    /**
     * 3.获取book注解上的数据,采用Junit框架
     */
    @Test
    public void parseAnnotation(){
        //a、先得到类对象
        Class c=BookStore.class;

        //b、判断这个类上面是否有注解
        if (c.isAnnotationPresent(book.class)){
            //c、要是有注解就获得注解对象
            book book = (book) c.getDeclaredAnnotation(book.class);

            //d、获取注解里面的信息
            System.out.println(book.authors());
            System.out.println(book.price());


        }



    }
}

/**
 *  2.定义BookStore类，在类和方法上用book注解
 */
@book(value = "yi ",price = 19.8,authors = {"lyi","ting"})
class BookStore{
    @book(value = "yi ",price = 19.8,authors = {"lyi","ting"})
    public void run(){
//        @book(value = "yi ",price = 19.8,authors = {"lyi","ting"})    报错
        int a;

    }
}




/**
 * 1.定义注解book（限定使用范围，方法和类。指定注解的范围：RUNTIME）
 * 元注解:将注解的适用范围限制在类和方法，生命周期设置为一直都有
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
 @interface book {
    String value();
    double price();
    String []authors();
}

















